/* #include "../include/MySQLClient.h" */
/* #include "../include/Logger.h" */
/* #include <stdlib.h> */
/* #include <stdio.h> */
/* #include <unistd.h> */
/* #include <errno.h> */
/* #include <crypt.h> */
/* #include <string> */
/* #include <cstring> */
/* #include <iostream> */
/* #include <sstream> */

/* using namespace std; */
/* using namespace myNameSpace; */

/* myNameSpace::MySQLClient mysqlClient; */

/* string genRandomSetting(size_t length = 8) // 生成一个MD5形式的随机setting（前缀"$1$"+length个字符长度的盐值） */
/* { */
/*     const char *prefix = "$1$"; // MD5 加密前缀 */
/*     char output[128] = {0}; */
/*     // 使用crypt_gensalt_rn函数（线程安全版本） */
/*     if (crypt_gensalt_rn(prefix, 0, NULL, length, output, sizeof(output)) == NULL) */
/*     { */
/*         perror("crypt_gensalt_rn"); */
/*         return ""; */
/*     } */
/*     return string(output); */
/* } */

/* int registerClient(const string &clientName, const string &clientSetting, const string &clientEncrypt) // 给指定用户添加数据 */
/* { */
/*     char sql[512] = {0}; // 确保缓冲区足够大！ */
/*     sprintf(sql, "insert into monitor_client(client_name, client_setting, client_encrypt) VALUES('%s', '%s', '%s');", clientName.c_str(), clientSetting.c_str(), clientEncrypt.c_str()); */
/*     bool ret = mysqlClient.writeOperationQuery(sql); */
/*     if (!ret) { */
/*         return -1; */
/*     } */
/*     string id = mysqlClient.findData("monitor_client", "client_id", "client_name", clientName); */
/*     if (id.empty()) { */
/*         return -1; */
/*     } */
/*     return std::stoi(id); */
/* } */

/* string createEncrypt(string password, string salt) */
/* { */
/*     // 此函数运行在服务器上，客户端由Qt生成encrypt */
/*     //  通过密码和盐值生成加密密文，保存到服务器数据库 */

/*     // 1. 在栈上分配工作缓冲区 */
/*     struct crypt_data data; */
/*     // 2. ！！！关键：初始化缓冲区，将其内存清零 */
/*     bzero(&data, sizeof(data)); */

/*     // 3. 调用线程安全的 crypt_r */
/*     char *result = crypt_r(password.c_str(), salt.c_str(), &data); */

/*     if (result == NULL) */
/*     { */
/*         perror("crypt_r"); */
/*         return ""; */
/*     } */
/*     string res(result); */
/*     return res; */
/* } */

/* bool isCodeSame(string encrypClient, string encryptSQL) */
/* { */
/*     // todo这个 */
/*     // encrypClient是客户二次计算后得到密文，发送给服务器 */
/*     // ncryptSQL是加密密文，存储在服务器上，此处需要从数据库取出 */
/*     return encryptSQL == encrypClient; */
/* } */

/* int main() */
/* { */
/*     mysqlClient.connect("localhost", "root", "1234", "smart_monitor_system", 0); */
/*     string tableName = "monitor_client"; */

/*     while (1) */
/*     { */
/*         string clientName, cilentPassword; */
/*         cout << "请输入账户名和密码" << endl; */
/*         cin >> clientName; */
/*         cout << "请输入密码" << endl; */
/*         cin >> cilentPassword; */

/*         string res = mysqlClient.findData(tableName, "client_name", "client_name", "'" + clientName + "'"); */
/*         if (res.empty()) */
/*         { */
/*             cout << "用户不存在，注册？" << endl; */
/*             cout << "此处Qt界面需要一个注册按钮" << endl; */

/*             // 该盐值获取函数，应该服务器提供，并且保存下来 */
/*             string clientSetting = genRandomSetting(); */
/*             cout << "setting: " << clientSetting << endl; */

/*             // 该加密密文获取函数，客户端提供， */
/*             string clientEncrypt = createEncrypt(cilentPassword, clientSetting); */

/*             // 在客户注册阶段二，接收到客户发送过来密文时，才能进行实际注册，写入数据库 */
/*             registerClient(clientName, clientSetting, clientEncrypt); */
/*             cout << "注册完成" << endl; */
/*         } */
/*         else */
/*         { */
/*             cout << "用户存在" << endl; */
/*             string clientSetting = mysqlClient.findData(tableName, "client_setting", "client_name", "'" + clientName + "'"); */
/*             string clientEncrypt_server = mysqlClient.findData(tableName, "client_encrypt", "client_name", "'" + clientName + "'"); */
/*             string clientEncrypt_local = createEncrypt(cilentPassword, clientSetting); */
/*             cout << "数据库中密文：" << clientEncrypt_server << endl; */
/*             cout << "用户密文：" << clientEncrypt_local << endl; */
/*             if (clientEncrypt_local == clientEncrypt_server) */
/*             { */
/*                 cout << "密码正确" << endl; */
/*                 break; */
/*             } */
/*             else */
/*             { */
/*                 cout << "密码错误" << endl; */
/*                 // TO DO最多尝试输入3次密码 */
/*             } */
/*         } */
/*     } */
/* } */
